fread関数は、ファイルからレコード単位に入力します。主に、バイナリデータを入力するために使用します。
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
*ptrは入力したデータを格納する領域を指定します。
sizeはレコード長をバイト単位で指定します。
nmembは入力するレコードの個数を指定します。
*streamはfopen関数で取得した、ファイルポインタを指定します。
戻り値として、入力したレコードの個数を返します。EOF又は、エラーの場合は、指定した個数より小さな値(又は0)を返します。
次の例題プログラムは番号、身長、体重、肥満度(BMI)を登録してあるbmi.datファイル(固定長バイナリレコード形式)から入力して、それぞれの値を出力します。
プログラム 例
#include <stdio.h> int main() { struct bmi_type { int number; /* 番号 */ double weight; /* 体重 */ double height; /* 身長 */ double bmi; /* 肥満度 */ } bmi_rec; /* 肥満度データ */ FILE *fp; int return_code = 0; if ((fp = fopen('bmi.dat', 'rb')) != NULL) { while(fread(&bmi_rec, sizeof(bmi_rec), 1, fp) == 1) { printf('%03d番目\n', bmi_rec.number); printf('\t体重:%.2fKg\n', bmi_rec.weight); printf('\t身長:%.2fCm\n', bmi_rec.height); printf('\t肥満度(BMI):%.2f\n', bmi_rec.bmi); } fclose(fp); } else { printf('ファイルのオープンに失敗しました\n'); return_code = 1; } return return_code; }
例の実行結果
$ ./fread.exe 001番目 体重:67.50Kg 身長:175.50Cm 肥満度(BMI):21.92 002番目 体重:88.00Kg 身長:187.80Cm 肥満度(BMI):24.95 003番目 体重:54.30Kg 身長:164.00Cm 肥満度(BMI):20.19 $